import Vue from "vue"
import VueRouter from "vue-router"
// 使用vuerouter
Vue.use(VueRouter)

// 引入路由首页
import Home from '../pages/Home'
import Login from '../pages/Login'
import Register from '../pages/Register'
import Search from '../pages/Search'


//重写push、replace方法 - 解决编程式路由跳转到当前路由（参数不变），多次执行会抛出NavigationDuplicated的警告错误
//1.将原方法保存
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;

//2.重写push方法 - 
// 传递三个参数 
// 第一个参数：告诉原来push的方法，往哪里跳（传递的参数）
// 第二个参数：成功的回调
// 第三个参数：失败的回调
VueRouter.prototype.push = function(location,resolve,reject){
    // 若传递了成功与失败的回调，则直接执行
    if(resolve && reject){
        originPush.call(this,location,resolve,reject)
    }else {
        // 若没有传入成功或者失败的回调，则传入
        originPush.call(this,location,()=>{},()=>{})
    }
}
// //重写replace
VueRouter.prototype.replace = function(location,resolve,reject){
    if(resolve && reject){
        originReplace.call(this,location,resolve,reject)
    } else {
        originReplace.call(this,location,()=>{},()=>{})
    }
}


// 创建路由并暴露
export default new VueRouter({
    routes:[
        {
            path:"/home",
            component:Home,
            meta:{
                show:true
            }
        },
        {
            path:"/login",
            component:Login,
            meta:{
                show:false
            }
        },
        {
            path:"/register",
            component:Register,
            meta:{
                show:false
            }
        },
        {
            name:"search",
            path:"/search/:keyword?",   //使用params参数进行占位时在后面加上一个问号可代表params参数可传可不传
            component:Search,
            meta:{
                show:true
            },
            // props传递参数：
            // 1.布尔值：
            // props:true,
            //2.对象写法-额外给路由传递其他参数
            // props:{
            //     a:1,
            //     b:3
            // }
            //3.函数写法
            props:($route)=>{
                return {
                    keyword:$route.params.keyword,
                    k:$route.query.k,
                    b:3
                }
            }
        },
        {
            path:"/",
            redirect:'home'
        }
    ]
})



